import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// import { createHtmlPlugin } from 'vite-plugin-html' // 临时注释，等待依赖安装
// import { visualizer } from 'rollup-plugin-visualizer' // 临时注释，等待依赖安装
// import { configDefaults } from 'vitest/config' // 临时注释，等待依赖安装

// https://vite.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    // 临时注释createHtmlPlugin配置，等待依赖安装
    // createHtmlPlugin({
    //   minify: {
    //     collapseWhitespace: true,
    //     removeComments: true,
    //     minifyCSS: true,
    //     minifyJS: true,
    //     removeEmptyAttributes: true,
    //     removeRedundantAttributes: true,
    //     removeScriptTypeAttributes: true,
    //     removeStyleLinkTypeAttributes: true
    //   },
    //   inject: {
    //     tags: [
    //       {
    //         tag: 'meta',
    //         attrs: {
    //           httpEquiv: 'Content-Encoding',
    //           content: 'gzip, br'
    //         },
    //         injectTo: 'head'
    //       },
    //       {
    //         tag: 'link',
    //         attrs: {
    //           rel: 'preload',
    //           href: '/assets/styles.css',
    //           as: 'style'
    //         },
    //         injectTo: 'head-prepend'
    //       }
    //     ]
    //   }
    // }),
    // 构建分析插件，帮助识别大文件
    // process.env.ANALYZE && visualizer({
    //   open: true,
    //   filename: 'build-stats.html'
    // })
  ].filter(Boolean),
  server: {
    port: 2180
  },
  build: {
    minify: 'terser',
    terserOptions: {
      compress: {
        drop_console: true,
        drop_debugger: true,
        // 更高的压缩级别
        passes: 2,
        // 删除未使用的变量和函数
        unused: true,
        // 内联常量
        inline: true,
        // 折叠变量
        collapse_vars: true,
        // 优化if条件
        conditionals: true,
        // 死代码消除
        dead_code: true
      },
      mangle: {
        // 启用名称混淆
        toplevel: true,
        // 保留类名
        keep_classnames: false,
        // 保留函数名
        keep_fnames: false
      },
      format: {
        comments: false
      }
    },
    // 优化CSS
    cssCodeSplit: true,
    // 启用CSS压缩
    minifyCss: true,
    // 启用资源压缩
    assetsInlineLimit: 4096, // 小于4kb的资源内联
    chunkSizeWarningLimit: 800, // 降低警告阈值以便更好地监控
    rollupOptions: {
      // 优化Tree Shaking
      treeshake: {
        moduleSideEffects: false,
        propertyReadSideEffects: false,
        tryCatchDeoptimization: false
      },
      output: {
        // 优化代码分割
        manualChunks: (id) => {
          // 分割第三方库
          if (id.includes('node_modules')) {
            if (id.includes('vue')) return 'vue-vendor';
            if (id.includes('axios')) return 'axios';
            if (id.includes('chart.js')) return 'chart';
            return 'vendor';
          }
          // 分割大型组件
          if (id.includes('components/ProfileSidebar.vue') || id.includes('components/UserProfile.vue')) {
            return 'profile-components';
          }
        },
        // 优化静态资源缓存
        assetFileNames: 'assets/[name]-[hash:8][extname]',
        chunkFileNames: 'chunks/[name]-[hash:8].js',
        entryFileNames: 'entries/[name]-[hash:8].js',
        // 启用压缩算法选择
        compact: true,
        // 优化模块连接
        interop: 'auto'
      }
    },
    sourcemap: false,
    // 启用rollup缓存
    cacheDir: '.vite/cache'
  },
  // 配置代理和压缩相关设置
  optimizeDeps: {
    esbuildOptions: {
      // 目标为现代浏览器以优化代码
      target: 'es2018',
      // 启用esbuild的代码压缩
      minify: true,
      // 优化导入的模块
      treeShaking: true
    },
    // 预构建关键依赖
    include: ['vue', 'axios', 'chart.js'],
    // 强制优化某些依赖
    force: true
  },
  // 配置资源处理
  assetsInclude: ['**/*.gltf', '**/*.glb', '**/*.wasm'],
  // 配置CSS优化
  css: {
    // 启用CSS模块化
    modules: {
      localsConvention: 'camelCaseOnly'
    },
    // 配置预处理器选项
    preprocessorOptions: {
      css: {
        charset: false
      }
    },
    // 启用CSS SourceMap (开发时)
    devSourcemap: false
  }
})